package com.example.layui.service;

import com.example.layui.dao.MenuMapper;
import com.example.layui.entity.Menu;
import com.example.layui.vo.MenuVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

@Service
public class MenuService {
    @Resource
    private MenuMapper menuMapper;

    public List<Menu> selectMenu(){

        Map<String,Object> data = new HashMap<String,Object>();


        List<Menu> allMenu = menuMapper.selectMenu();
        //根节点
        List<Menu> rootMenu = new ArrayList<Menu>();
        for (Menu nav : allMenu) {
            System.out.println(nav.getId());
            if(nav.getParentId().equals(0)){//父节点是0的，为根节点。
                rootMenu.add(nav);
            }
        }
        /* 根据Menu类的order排序 */
        //为根菜单设置子菜单，getClild是递归调用的
        for (Menu nav : rootMenu) {
            /* 获取根节点下的所有子节点 使用getChild方法*/
            List<Menu> childList = this.getChild(nav.getId(), allMenu);
            nav.setChildren(childList);//给根节点设置子节点
        }
        /**
         * 输出构建好的菜单数据。
         *
         */
        data.put("success", "true");
        data.put("list", rootMenu);



        return rootMenu;



    }


    public List<Menu> getChild(Integer id,List<Menu> allMenu){
        //子菜单
        List<Menu> childList = new ArrayList<Menu>();
        for (Menu nav : allMenu) {
            // 遍历所有节点，将所有菜单的父id与传过来的根节点的id比较
            //相等说明：为该根节点的子节点。
            if(nav.getParentId().equals(id)){
                childList.add(nav);
            }
        }
        //递归
        for (Menu nav : childList) {
            nav.setChildren(this.getChild(nav.getId(), allMenu));
        }
        //如果节点下没有子节点，返回一个空List（递归退出）
        if(childList.size() == 0){
            return new ArrayList<Menu>();
        }
        return childList;
    }
}
